home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 1999 August / SGI Freeware 1999 August.iso / dist / fw_xemacs.idb / usr / freeware / lib / xemacs-20.4 / info / lispref.info-39.z / lispref.info-39
Encoding:
GNU Info File  |  1998-05-21  |  50.8 KB  |  1,246 lines

  1. This is Info file ../../info/lispref.info, produced by Makeinfo version
  2. 1.68 from the input file lispref.texi.
  3.  
  4.    Edition History:
  5.  
  6.    GNU Emacs Lisp Reference Manual Second Edition (v2.01), May 1993 GNU
  7. Emacs Lisp Reference Manual Further Revised (v2.02), August 1993 Lucid
  8. Emacs Lisp Reference Manual (for 19.10) First Edition, March 1994
  9. XEmacs Lisp Programmer's Manual (for 19.12) Second Edition, April 1995
  10. GNU Emacs Lisp Reference Manual v2.4, June 1995 XEmacs Lisp
  11. Programmer's Manual (for 19.13) Third Edition, July 1995 XEmacs Lisp
  12. Reference Manual (for 19.14 and 20.0) v3.1, March 1996 XEmacs Lisp
  13. Reference Manual (for 19.15 and 20.1, 20.2) v3.2, April, May 1997
  14.  
  15.    Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995 Free Software
  16. Foundation, Inc.  Copyright (C) 1994, 1995 Sun Microsystems, Inc.
  17. Copyright (C) 1995, 1996 Ben Wing.
  18.  
  19.    Permission is granted to make and distribute verbatim copies of this
  20. manual provided the copyright notice and this permission notice are
  21. preserved on all copies.
  22.  
  23.    Permission is granted to copy and distribute modified versions of
  24. this manual under the conditions for verbatim copying, provided that the
  25. entire resulting derived work is distributed under the terms of a
  26. permission notice identical to this one.
  27.  
  28.    Permission is granted to copy and distribute translations of this
  29. manual into another language, under the above conditions for modified
  30. versions, except that this permission notice may be stated in a
  31. translation approved by the Foundation.
  32.  
  33.    Permission is granted to copy and distribute modified versions of
  34. this manual under the conditions for verbatim copying, provided also
  35. that the section entitled "GNU General Public License" is included
  36. exactly as in the original, and provided that the entire resulting
  37. derived work is distributed under the terms of a permission notice
  38. identical to this one.
  39.  
  40.    Permission is granted to copy and distribute translations of this
  41. manual into another language, under the above conditions for modified
  42. versions, except that the section entitled "GNU General Public License"
  43. may be included in a translation approved by the Free Software
  44. Foundation instead of in the original English.
  45.  
  46. 
  47. File: lispref.info,  Node: Elisp Interface for Receiving Messages,  Prev: Example of Receiving Messages,  Up: Receiving Messages
  48.  
  49. Elisp Interface for Receiving Messages
  50. --------------------------------------
  51.  
  52.  - Function: make-tooltalk-pattern ATTRIBUTES
  53.      Create a ToolTalk pattern and initialize its attributes.  The
  54.      value of attributes must be a list of alternating keyword/values,
  55.      where keywords are symbols that name valid pattern attributes or
  56.      lists of valid attributes.  For example:
  57.  
  58.             (make-tooltalk-pattern
  59.               '(category TT_OBSERVE
  60.                    scope TT_SESSION
  61.                       op ("operation1" "operation2")
  62.                     args ("arg1" 12345 (TT_INOUT "arg3" "string"))))
  63.  
  64.      Attribute names are the same as those supported by
  65.      `add-tooltalk-pattern-attribute', plus `'args'.
  66.  
  67.      Values must always be strings, integers, or symbols that represent
  68.      ToolTalk constants or lists of same.  When a list of values is
  69.      provided all of the list elements are added to the attribute.  In
  70.      the example above, messages whose `op' attribute is `"operation1"'
  71.      or `"operation2"' would match the pattern.
  72.  
  73.      The value of ARGS should be a list of pattern arguments where each
  74.      pattern argument has the following form:
  75.  
  76.              `(mode [value [type]])' or just `value'
  77.  
  78.      Where MODE is one of `TT_IN', `TT_OUT', or `TT_INOUT' and TYPE is
  79.      a string.  If TYPE isn't specified then `int' is used if VALUE is
  80.      a number; otherwise `string' is used.  If TYPE is `string' then
  81.      VALUE is converted to a string (if it isn't a string already) with
  82.      `prin1-to-string'.  If only a value is specified then MODE
  83.      defaults to `TT_IN'.  If MODE is `TT_OUT' then VALUE and TYPE
  84.      don't need to be specified.  You can find out more about the
  85.      semantics and uses of ToolTalk pattern arguments in chapter 3 of
  86.      the `ToolTalk Programmer's Guide'.
  87.  
  88.  
  89.  - Function: register-tooltalk-pattern PAT
  90.      XEmacs will begin receiving messages that match this pattern.
  91.  
  92.  - Function: unregister-tooltalk-pattern PAT
  93.      XEmacs will stop receiving messages that match this pattern.
  94.  
  95.  - Function: add-tooltalk-pattern-attribute VALUE PAT INDICATOR
  96.      Add one value to the indicated pattern attribute. The names of
  97.      attributes are the same as the ToolTalk accessors used to set them
  98.      less the `tooltalk_pattern_' prefix and the `_add' suffix.  For
  99.      example, the name of the attribute for the
  100.      `tt_pattern_disposition_add' attribute is `disposition'.  The
  101.      `category' attribute is handled specially, since a pattern can only
  102.      be a member of one category (`TT_OBSERVE' or `TT_HANDLE').
  103.  
  104.      Callbacks are handled slightly differently than in the C ToolTalk
  105.      API.  The value of CALLBACK should be the name of a function of one
  106.      argument.  It will be called each time the pattern matches an
  107.      incoming message.
  108.  
  109.  - Function: add-tooltalk-pattern-arg PAT MODE TYPE VALUE
  110.      Add one fully-specified argument to a ToolTalk pattern.  MODE must
  111.      be one of `TT_IN', `TT_INOUT', or `TT_OUT'.  TYPE must be a
  112.      string.  VALUE can be an integer, string or `nil'.  If VALUE is an
  113.      integer then an integer argument (`tt_pattern_iarg_add') is added;
  114.      otherwise a string argument is added.  At present there's no way
  115.      to add a binary data argument.
  116.  
  117.  
  118.  - Function: create-tooltalk-pattern
  119.      Create a new ToolTalk pattern and initialize its session attribute
  120.      to be the default session.
  121.  
  122.  - Function: destroy-tooltalk-pattern PAT
  123.      Apply `tt_pattern_destroy' to the pattern.  This effectively
  124.      unregisters the pattern.
  125.  
  126.  - Function: describe-tooltalk-message MSG &optional STREAM
  127.      Print the message's attributes and arguments to STREAM.  This is
  128.      often useful for debugging.
  129.  
  130. 
  131. File: lispref.info,  Node: Internationalization,  Next: MULE,  Prev: ToolTalk Support,  Up: Top
  132.  
  133. Internationalization
  134. ********************
  135.  
  136. * Menu:
  137.  
  138. * I18N Levels 1 and 2:: Support for different time, date, and currency formats.
  139. * I18N Level 3::        Support for localized messages.
  140. * I18N Level 4::        Support for Asian languages.
  141.  
  142. 
  143. File: lispref.info,  Node: I18N Levels 1 and 2,  Next: I18N Level 3,  Up: Internationalization
  144.  
  145. I18N Levels 1 and 2
  146. ===================
  147.  
  148.    XEmacs is now compliant with I18N levels 1 and 2.  Specifically,
  149. this means that it is 8-bit clean and correctly handles time and date
  150. functions.  XEmacs will correctly display the entire ISO-Latin 1
  151. character set.
  152.  
  153.    The compose key may now be used to create any character in the
  154. ISO-Latin 1 character set not directly available via the keyboard..  In
  155. order for the compose key to work it is necessary to load the file
  156. `x-compose.el'.  At any time while composing a character, `C-h' will
  157. display all valid completions and the character which would be produced.
  158.  
  159. 
  160. File: lispref.info,  Node: I18N Level 3,  Next: I18N Level 4,  Prev: I18N Levels 1 and 2,  Up: Internationalization
  161.  
  162. I18N Level 3
  163. ============
  164.  
  165. * Menu:
  166.  
  167. * Level 3 Basics::
  168. * Level 3 Primitives::
  169. * Dynamic Messaging::
  170. * Domain Specification::
  171. * Documentation String Extraction::
  172.  
  173. 
  174. File: lispref.info,  Node: Level 3 Basics,  Next: Level 3 Primitives,  Up: I18N Level 3
  175.  
  176. Level 3 Basics
  177. --------------
  178.  
  179.    XEmacs now provides alpha-level functionality for I18N Level 3.
  180. This means that everything necessary for full messaging is available,
  181. but not every file has been converted.
  182.  
  183.    The two message files which have been created are `src/emacs.po' and
  184. `lisp/packages/mh-e.po'.  Both files need to be converted using
  185. `msgfmt', and the resulting `.mo' files placed in some locale's
  186. `LC_MESSAGES' directory.  The test "translations" in these files are
  187. the original messages prefixed by `TRNSLT_'.
  188.  
  189.    The domain for a variable is stored on the variable's property list
  190. under the property name VARIABLE-DOMAIN.  The function
  191. `documentation-property' uses this information when translating a
  192. variable's documentation.
  193.  
  194. 
  195. File: lispref.info,  Node: Level 3 Primitives,  Next: Dynamic Messaging,  Prev: Level 3 Basics,  Up: I18N Level 3
  196.  
  197. Level 3 Primitives
  198. ------------------
  199.  
  200.  - Function: gettext STRING
  201.      This function looks up STRING in the default message domain and
  202.      returns its translation.  If `I18N3' was not enabled when XEmacs
  203.      was compiled, it just returns STRING.
  204.  
  205.  - Function: dgettext DOMAIN STRING
  206.      This function looks up STRING in the specified message domain and
  207.      returns its translation.  If `I18N3' was not enabled when XEmacs
  208.      was compiled, it just returns STRING.
  209.  
  210.  - Function: bind-text-domain DOMAIN PATHNAME
  211.      This function associates a pathname with a message domain.  Here's
  212.      how the path to message file is constructed under SunOS 5.x:
  213.  
  214.           `{pathname}/{LANG}/LC_MESSAGES/{domain}.mo'
  215.  
  216.      If `I18N3' was not enabled when XEmacs was compiled, this function
  217.      does nothing.
  218.  
  219.  - Special Form: domain STRING
  220.      This function specifies the text domain used for translating
  221.      documentation strings and interactive prompts of a function.  For
  222.      example, write:
  223.  
  224.           (defun foo (arg) "Doc string" (domain "emacs-foo") ...)
  225.  
  226.      to specify `emacs-foo' as the text domain of the function `foo'.
  227.      The "call" to `domain' is actually a declaration rather than a
  228.      function; when actually called, `domain' just returns `nil'.
  229.  
  230.  - Function: domain-of FUNCTION
  231.      This function returns the text domain of FUNCTION; it returns
  232.      `nil' if it is the default domain.  If `I18N3' was not enabled
  233.      when XEmacs was compiled, it always returns `nil'.
  234.  
  235. 
  236. File: lispref.info,  Node: Dynamic Messaging,  Next: Domain Specification,  Prev: Level 3 Primitives,  Up: I18N Level 3
  237.  
  238. Dynamic Messaging
  239. -----------------
  240.  
  241.    The `format' function has been extended to permit you to change the
  242. order of parameter insertion.  For example, the conversion format
  243. `%1$s' inserts parameter one as a string, while `%2$s' inserts
  244. parameter two.  This is useful when creating translations which require
  245. you to change the word order.
  246.  
  247. 
  248. File: lispref.info,  Node: Domain Specification,  Next: Documentation String Extraction,  Prev: Dynamic Messaging,  Up: I18N Level 3
  249.  
  250. Domain Specification
  251. --------------------
  252.  
  253.    The default message domain of XEmacs is `emacs'.  For add-on
  254. packages, it is best to use a different domain.  For example, let us
  255. say we want to convert the "gorilla" package to use the domain
  256. `emacs-gorilla'.  To translate the message "What gorilla?", use
  257. `dgettext' as follows:
  258.  
  259.      (dgettext "emacs-gorilla" "What gorilla?")
  260.  
  261.    A function (or macro) which has a documentation string or an
  262. interactive prompt needs to be associated with the domain in order for
  263. the documentation or prompt to be translated.  This is done with the
  264. `domain' special form as follows:
  265.  
  266.      (defun scratch (location)
  267.        "Scratch the specified location."
  268.        (domain "emacs-gorilla")
  269.        (interactive "sScratch: ")
  270.        ... )
  271.  
  272.    It is most efficient to specify the domain in the first line of the
  273. function body, before the `interactive' form.
  274.  
  275.    For variables and constants which have documentation strings,
  276. specify the domain after the documentation.
  277.  
  278.  - Special Form: defvar SYMBOL [VALUE [DOC-STRING [DOMAIN]]]
  279.      Example:
  280.           (defvar weight 250 "Weight of gorilla, in pounds." "emacs-gorilla")
  281.  
  282.  - Special Form: defconst SYMBOL [VALUE [DOC-STRING [DOMAIN]]]
  283.      Example:
  284.           (defconst limbs 4 "Number of limbs" "emacs-gorilla")
  285.  
  286.    Autoloaded functions which are specified in `loaddefs.el' do not need
  287. to have a domain specification, because their documentation strings are
  288. extracted into the main message base.  However, for autoloaded functions
  289. which are specified in a separate package, use following syntax:
  290.  
  291.  - Function: autoload SYMBOL FILENAME &optional DOCSTRING INTERACTIVE
  292.           MACRO DOMAIN
  293.      Example:
  294.           (autoload 'explore "jungle" "Explore the jungle." nil nil "emacs-gorilla")
  295.  
  296. 
  297. File: lispref.info,  Node: Documentation String Extraction,  Prev: Domain Specification,  Up: I18N Level 3
  298.  
  299. Documentation String Extraction
  300. -------------------------------
  301.  
  302.    The utility `etc/make-po' scans the file `DOC' to extract
  303. documentation strings and creates a message file `doc.po'.  This file
  304. may then be inserted within `emacs.po'.
  305.  
  306.    Currently, `make-po' is hard-coded to read from `DOC' and write to
  307. `doc.po'.  In order to extract documentation strings from an add-on
  308. package, first run `make-docfile' on the package to produce the `DOC'
  309. file.  Then run `make-po -p' with the `-p' argument to indicate that we
  310. are extracting documentation for an add-on package.
  311.  
  312.    (The `-p' argument is a kludge to make up for a subtle difference
  313. between pre-loaded documentation and add-on documentation:  For add-on
  314. packages, the final carriage returns in the strings produced by
  315. `make-docfile' must be ignored.)
  316.  
  317. 
  318. File: lispref.info,  Node: I18N Level 4,  Prev: I18N Level 3,  Up: Internationalization
  319.  
  320. I18N Level 4
  321. ============
  322.  
  323.    The Asian-language support in XEmacs is called "MULE".  *Note MULE::.
  324.  
  325. 
  326. File: lispref.info,  Node: MULE,  Next: Tips,  Prev: Internationalization,  Up: Top
  327.  
  328. MULE
  329. ****
  330.  
  331.    "MULE" is the name originally given to the version of GNU Emacs
  332. extended for multi-lingual (and in particular Asian-language) support.
  333. "MULE" is short for "MUlti-Lingual Emacs".  It was originally called
  334. Nemacs ("Nihon Emacs" where "Nihon" is the Japanese word for "Japan"),
  335. when it only provided support for Japanese.  XEmacs refers to its
  336. multi-lingual support as "MULE support" since it is based on "MULE".
  337.  
  338. * Menu:
  339.  
  340. * Internationalization Terminology::
  341.                         Definition of various internationalization terms.
  342. * Charsets::            Sets of related characters.
  343. * MULE Characters::     Working with characters in XEmacs/MULE.
  344. * Composite Characters:: Making new characters by overstriking other ones.
  345. * ISO 2022::            An international standard for charsets and encodings.
  346. * Coding Systems::      Ways of representing a string of chars using integers.
  347. * CCL::                 A special language for writing fast converters.
  348. * Category Tables::     Subdividing charsets into groups.
  349.  
  350. 
  351. File: lispref.info,  Node: Internationalization Terminology,  Next: Charsets,  Up: MULE
  352.  
  353. Internationalization Terminology
  354. ================================
  355.  
  356.    In internationalization terminology, a string of text is divided up
  357. into "characters", which are the printable units that make up the text.
  358. A single character is (for example) a capital `A', the number `2', a
  359. Katakana character, a Kanji ideograph (an "ideograph" is a "picture"
  360. character, such as is used in Japanese Kanji, Chinese Hanzi, and Korean
  361. Hangul; typically there are thousands of such ideographs in each
  362. language), etc.  The basic property of a character is its shape.  Note
  363. that the same character may be drawn by two different people (or in two
  364. different fonts) in slightly different ways, although the basic shape
  365. will be the same.
  366.  
  367.    In some cases, the differences will be significant enough that it is
  368. actually possible to identify two or more distinct shapes that both
  369. represent the same character.  For example, the lowercase letters `a'
  370. and `g' each have two distinct possible shapes - the `a' can optionally
  371. have a curved tail projecting off the top, and the `g' can be formed
  372. either of two loops, or of one loop and a tail hanging off the bottom.
  373. Such distinct possible shapes of a character are called "glyphs".  The
  374. important characteristic of two glyphs making up the same character is
  375. that the choice between one or the other is purely stylistic and has no
  376. linguistic effect on a word (this is the reason why a capital `A' and
  377. lowercase `a' are different characters rather than different glyphs -
  378. e.g.  `Aspen' is a city while `aspen' is a kind of tree).
  379.  
  380.    Note that "character" and "glyph" are used differently here than
  381. elsewhere in XEmacs.
  382.  
  383.    A "character set" is simply a set of related characters.  ASCII, for
  384. example, is a set of 94 characters (or 128, if you count non-printing
  385. characters).  Other character sets are ISO8859-1 (ASCII plus various
  386. accented characters and other international symbols), JISX0201 (ASCII,
  387. more or less, plus half-width Katakana), JISX0208 (Japanese Kanji),
  388. JISX0212 (a second set of less-used Japanese Kanji), GB2312 (Mainland
  389. Chinese Hanzi), etc.
  390.  
  391.    Every character set has one or more "orderings", which can be viewed
  392. as a way of assigning a number (or set of numbers) to each character in
  393. the set.  For most character sets, there is a standard ordering, and in
  394. fact all of the character sets mentioned above define a particular
  395. ordering.  ASCII, for example, places letters in their "natural" order,
  396. puts uppercase letters before lowercase letters, numbers before
  397. letters, etc.  Note that for many of the Asian character sets, there is
  398. no natural ordering of the characters.  The actual orderings are based
  399. on one or more salient characteristic, of which there are many to
  400. choose from - e.g. number of strokes, common radicals, phonetic
  401. ordering, etc.
  402.  
  403.    The set of numbers assigned to any particular character are called
  404. the character's "position codes".  The number of position codes
  405. required to index a particular character in a character set is called
  406. the "dimension" of the character set.  ASCII, being a relatively small
  407. character set, is of dimension one, and each character in the set is
  408. indexed using a single position code, in the range 0 through 127 (if
  409. non-printing characters are included) or 33 through 126 (if only the
  410. printing characters are considered).  JISX0208, i.e.  Japanese Kanji,
  411. has thousands of characters, and is of dimension two - every character
  412. is indexed by two position codes, each in the range 33 through 126.
  413. (Note that the choice of the range here is somewhat arbitrary.
  414. Although a character set such as JISX0208 defines an *ordering* of all
  415. its characters, it does not define the actual mapping between numbers
  416. and characters.  You could just as easily index the characters in
  417. JISX0208 using numbers in the range 0 through 93, 1 through 94, 2
  418. through 95, etc.  The reason for the actual range chosen is so that the
  419. position codes match up with the actual values used in the common
  420. encodings.)
  421.  
  422.    An "encoding" is a way of numerically representing characters from
  423. one or more character sets into a stream of like-sized numerical values
  424. called "words"; typically these are 8-bit, 16-bit, or 32-bit
  425. quantities.  If an encoding encompasses only one character set, then the
  426. position codes for the characters in that character set could be used
  427. directly. (This is the case with ASCII, and as a result, most people do
  428. not understand the difference between a character set and an encoding.)
  429. This is not possible, however, if more than one character set is to be
  430. used in the encoding.  For example, printed Japanese text typically
  431. requires characters from multiple character sets - ASCII, JISX0208, and
  432. JISX0212, to be specific.  Each of these is indexed using one or more
  433. position codes in the range 33 through 126, so the position codes could
  434. not be used directly or there would be no way to tell which character
  435. was meant.  Different Japanese encodings handle this differently - JIS
  436. uses special escape characters to denote different character sets; EUC
  437. sets the high bit of the position codes for JISX0208 and JISX0212, and
  438. puts a special extra byte before each JISX0212 character; etc. (JIS,
  439. EUC, and most of the other encodings you will encounter are 7-bit or
  440. 8-bit encodings.  There is one common 16-bit encoding, which is Unicode;
  441. this strives to represent all the world's characters in a single large
  442. character set.  32-bit encodings are generally used internally in
  443. programs to simplify the code that manipulates them; however, they are
  444. not much used externally because they are not very space-efficient.)
  445.  
  446.    Encodings are classified as either "modal" or "non-modal".  In a
  447. "modal encoding", there are multiple states that the encoding can be in,
  448. and the interpretation of the values in the stream depends on the
  449. current global state of the encoding.  Special values in the encoding,
  450. called "escape sequences", are used to change the global state.  JIS,
  451. for example, is a modal encoding.  The bytes `ESC $ B' indicate that,
  452. from then on, bytes are to be interpreted as position codes for
  453. JISX0208, rather than as ASCII.  This effect is cancelled using the
  454. bytes `ESC ( B', which mean "switch from whatever the current state is
  455. to ASCII".  To switch to JISX0212, the escape sequence `ESC $ ( D'.
  456. (Note that here, as is common, the escape sequences do in fact begin
  457. with `ESC'.  This is not necessarily the case, however.)
  458.  
  459.    A "non-modal encoding" has no global state that extends past the
  460. character currently being interpreted.  EUC, for example, is a
  461. non-modal encoding.  Characters in JISX0208 are encoded by setting the
  462. high bit of the position codes, and characters in JISX0212 are encoded
  463. by doing the same but also prefixing the character with the byte 0x8F.
  464.  
  465.    The advantage of a modal encoding is that it is generally more
  466. space-efficient, and is easily extendable because there are essentially
  467. an arbitrary number of escape sequences that can be created.  The
  468. disadvantage, however, is that it is much more difficult to work with
  469. if it is not being processed in a sequential manner.  In the non-modal
  470. EUC encoding, for example, the byte 0x41 always refers to the letter
  471. `A'; whereas in JIS, it could either be the letter `A', or one of the
  472. two position codes in a JISX0208 character, or one of the two position
  473. codes in a JISX0212 character.  Determining exactly which one is meant
  474. could be difficult and time-consuming if the previous bytes in the
  475. string have not already been processed.
  476.  
  477.    Non-modal encodings are further divided into "fixed-width" and
  478. "variable-width" formats.  A fixed-width encoding always uses the same
  479. number of words per character, whereas a variable-width encoding does
  480. not.  EUC is a good example of a variable-width encoding: one to three
  481. bytes are used per character, depending on the character set.  16-bit
  482. and 32-bit encodings are nearly always fixed-width, and this is in fact
  483. one of the main reasons for using an encoding with a larger word size.
  484. The advantages of fixed-width encodings should be obvious.  The
  485. advantages of variable-width encodings are that they are generally more
  486. space-efficient and allow for compatibility with existing 8-bit
  487. encodings such as ASCII.
  488.  
  489.    Note that the bytes in an 8-bit encoding are often referred to as
  490. "octets" rather than simply as bytes.  This terminology dates back to
  491. the days before 8-bit bytes were universal, when some computers had
  492. 9-bit bytes, others had 10-bit bytes, etc.
  493.  
  494. 
  495. File: lispref.info,  Node: Charsets,  Next: MULE Characters,  Prev: Internationalization Terminology,  Up: MULE
  496.  
  497. Charsets
  498. ========
  499.  
  500.    A "charset" in MULE is an object that encapsulates a particular
  501. character set as well as an ordering of those characters.  Charsets are
  502. permanent objects and are named using symbols, like faces.
  503.  
  504.  - Function: charsetp OBJECT
  505.      This function returns non-`nil' if OBJECT is a charset.
  506.  
  507. * Menu:
  508.  
  509. * Charset Properties::          Properties of a charset.
  510. * Basic Charset Functions::     Functions for working with charsets.
  511. * Charset Property Functions::  Functions for accessing charset properties.
  512. * Predefined Charsets::         Predefined charset objects.
  513.  
  514. 
  515. File: lispref.info,  Node: Charset Properties,  Next: Basic Charset Functions,  Up: Charsets
  516.  
  517. Charset Properties
  518. ------------------
  519.  
  520.    Charsets have the following properties:
  521.  
  522. `name'
  523.      A symbol naming the charset.  Every charset must have a different
  524.      name; this allows a charset to be referred to using its name
  525.      rather than the actual charset object.
  526.  
  527. `doc-string'
  528.      A documentation string describing the charset.
  529.  
  530. `registry'
  531.      A regular expression matching the font registry field for this
  532.      character set.  For example, both the `ascii' and `latin-iso8859-1'
  533.      charsets use the registry `"ISO8859-1"'.  This field is used to
  534.      choose an appropriate font when the user gives a general font
  535.      specification such as `-*-courier-medium-r-*-140-*', i.e. a
  536.      14-point upright medium-weight Courier font.
  537.  
  538. `dimension'
  539.      Number of position codes used to index a character in the
  540.      character set.  XEmacs/MULE can only handle character sets of
  541.      dimension 1 or 2.  This property defaults to 1.
  542.  
  543. `chars'
  544.      Number of characters in each dimension.  In XEmacs/MULE, the only
  545.      allowed values are 94 or 96. (There are a couple of pre-defined
  546.      character sets, such as ASCII, that do not follow this, but you
  547.      cannot define new ones like this.) Defaults to 94.  Note that if
  548.      the dimension is 2, the character set thus described is 94x94 or
  549.      96x96.
  550.  
  551. `columns'
  552.      Number of columns used to display a character in this charset.
  553.      Only used in TTY mode. (Under X, the actual width of a character
  554.      can be derived from the font used to display the characters.)  If
  555.      unspecified, defaults to the dimension. (This is almost always the
  556.      correct value, because character sets with dimension 2 are usually
  557.      ideograph character sets, which need two columns to display the
  558.      intricate ideographs.)
  559.  
  560. `direction'
  561.      A symbol, either `l2r' (left-to-right) or `r2l' (right-to-left).
  562.      Defaults to `l2r'.  This specifies the direction that the text
  563.      should be displayed in, and will be left-to-right for most
  564.      charsets but right-to-left for Hebrew and Arabic. (Right-to-left
  565.      display is not currently implemented.)
  566.  
  567. `final'
  568.      Final byte of the standard ISO 2022 escape sequence designating
  569.      this charset.  Must be supplied.  Each combination of (DIMENSION,
  570.      CHARS) defines a separate namespace for final bytes, and each
  571.      charset within a particular namespace must have a different final
  572.      byte.  Note that ISO 2022 restricts the final byte to the range
  573.      0x30 - 0x7E if dimension == 1, and 0x30 - 0x5F if dimension == 2.
  574.      Note also that final bytes in the range 0x30 - 0x3F are reserved
  575.      for user-defined (not official) character sets.  For more
  576.      information on ISO 2022, see *Note Coding Systems::.
  577.  
  578. `graphic'
  579.      0 (use left half of font on output) or 1 (use right half of font on
  580.      output).  Defaults to 0.  This specifies how to convert the
  581.      position codes that index a character in a character set into an
  582.      index into the font used to display the character set.  With
  583.      `graphic' set to 0, position codes 33 through 126 map to font
  584.      indices 33 through 126; with it set to 1, position codes 33
  585.      through 126 map to font indices 161 through 254 (i.e. the same
  586.      number but with the high bit set).  For example, for a font whose
  587.      registry is ISO8859-1, the left half of the font (octets 0x20 -
  588.      0x7F) is the `ascii' charset, while the right half (octets 0xA0 -
  589.      0xFF) is the `latin-iso8859-1' charset.
  590.  
  591. `ccl-program'
  592.      A compiled CCL program used to convert a character in this charset
  593.      into an index into the font.  This is in addition to the `graphic'
  594.      property.  If a CCL program is defined, the position codes of a
  595.      character will first be processed according to `graphic' and then
  596.      passed through the CCL program, with the resulting values used to
  597.      index the font.
  598.  
  599.      This is used, for example, in the Big5 character set (used in
  600.      Taiwan).  This character set is not ISO-2022-compliant, and its
  601.      size (94x157) does not fit within the maximum 96x96 size of
  602.      ISO-2022-compliant character sets.  As a result, XEmacs/MULE
  603.      splits it (in a rather complex fashion, so as to group the most
  604.      commonly used characters together) into two charset objects
  605.      (`big5-1' and `big5-2'), each of size 94x94, and each charset
  606.      object uses a CCL program to convert the modified position codes
  607.      back into standard Big5 indices to retrieve a character from a
  608.      Big5 font.
  609.  
  610.    Most of the above properties can only be changed when the charset is
  611. created.  *Note Charset Property Functions::.
  612.  
  613. 
  614. File: lispref.info,  Node: Basic Charset Functions,  Next: Charset Property Functions,  Prev: Charset Properties,  Up: Charsets
  615.  
  616. Basic Charset Functions
  617. -----------------------
  618.  
  619.  - Function: find-charset CHARSET-OR-NAME
  620.      This function retrieves the charset of the given name.  If
  621.      CHARSET-OR-NAME is a charset object, it is simply returned.
  622.      Otherwise, CHARSET-OR-NAME should be a symbol.  If there is no
  623.      such charset, `nil' is returned.  Otherwise the associated charset
  624.      object is returned.
  625.  
  626.  - Function: get-charset NAME
  627.      This function retrieves the charset of the given name.  Same as
  628.      `find-charset' except an error is signalled if there is no such
  629.      charset instead of returning `nil'.
  630.  
  631.  - Function: charset-list
  632.      This function returns a list of the names of all defined charsets.
  633.  
  634.  - Function: make-charset NAME DOC-STRING PROPS
  635.      This function defines a new character set.  This function is for
  636.      use with Mule support.  NAME is a symbol, the name by which the
  637.      character set is normally referred.  DOC-STRING is a string
  638.      describing the character set.  PROPS is a property list,
  639.      describing the specific nature of the character set.  The
  640.      recognized properties are `registry', `dimension', `columns',
  641.      `chars', `final', `graphic', `direction', and `ccl-program', as
  642.      previously described.
  643.  
  644.  - Function: make-reverse-direction-charset CHARSET NEW-NAME
  645.      This function makes a charset equivalent to CHARSET but which goes
  646.      in the opposite direction.  NEW-NAME is the name of the new
  647.      charset.  The new charset is returned.
  648.  
  649.  - Function: charset-from-attributes DIMENSION CHARS FINAL &optional
  650.           DIRECTION
  651.      This function returns a charset with the given DIMENSION, CHARS,
  652.      FINAL, and DIRECTION.  If DIRECTION is omitted, both directions
  653.      will be checked (left-to-right will be returned if character sets
  654.      exist for both directions).
  655.  
  656.  - Function: charset-reverse-direction-charset CHARSET
  657.      This function returns the charset (if any) with the same dimension,
  658.      number of characters, and final byte as CHARSET, but which is
  659.      displayed in the opposite direction.
  660.  
  661. 
  662. File: lispref.info,  Node: Charset Property Functions,  Next: Predefined Charsets,  Prev: Basic Charset Functions,  Up: Charsets
  663.  
  664. Charset Property Functions
  665. --------------------------
  666.  
  667.    All of these functions accept either a charset name or charset
  668. object.
  669.  
  670.  - Function: charset-property CHARSET PROP
  671.      This function returns property PROP of CHARSET.  *Note Charset
  672.      Properties::.
  673.  
  674.    Convenience functions are also provided for retrieving individual
  675. properties of a charset.
  676.  
  677.  - Function: charset-name CHARSET
  678.      This function returns the name of CHARSET.  This will be a symbol.
  679.  
  680.  - Function: charset-doc-string CHARSET
  681.      This function returns the doc string of CHARSET.
  682.  
  683.  - Function: charset-registry CHARSET
  684.      This function returns the registry of CHARSET.
  685.  
  686.  - Function: charset-dimension CHARSET
  687.      This function returns the dimension of CHARSET.
  688.  
  689.  - Function: charset-chars CHARSET
  690.      This function returns the number of characters per dimension of
  691.      CHARSET.
  692.  
  693.  - Function: charset-columns CHARSET
  694.      This function returns the number of display columns per character
  695.      (in TTY mode) of CHARSET.
  696.  
  697.  - Function: charset-direction CHARSET
  698.      This function returns the display direction of CHARSET - either
  699.      `l2r' or `r2l'.
  700.  
  701.  - Function: charset-final CHARSET
  702.      This function returns the final byte of the ISO 2022 escape
  703.      sequence designating CHARSET.
  704.  
  705.  - Function: charset-graphic CHARSET
  706.      This function returns either 0 or 1, depending on whether the
  707.      position codes of characters in CHARSET map to the left or right
  708.      half of their font, respectively.
  709.  
  710.  - Function: charset-ccl-program CHARSET
  711.      This function returns the CCL program, if any, for converting
  712.      position codes of characters in CHARSET into font indices.
  713.  
  714.    The only property of a charset that can currently be set after the
  715. charset has been created is the CCL program.
  716.  
  717.  - Function: set-charset-ccl-program CHARSET CCL-PROGRAM
  718.      This function sets the `ccl-program' property of CHARSET to
  719.      CCL-PROGRAM.
  720.  
  721. 
  722. File: lispref.info,  Node: Predefined Charsets,  Prev: Charset Property Functions,  Up: Charsets
  723.  
  724. Predefined Charsets
  725. -------------------
  726.  
  727.    The following charsets are predefined in the C code.
  728.  
  729.      Name                    Type  Fi Gr Dir Registry
  730.      --------------------------------------------------------------
  731.      ascii                    94    B  0  l2r ISO8859-1
  732.      control-1                94       0  l2r ---
  733.      latin-iso8859-1          94    A  1  l2r ISO8859-1
  734.      latin-iso8859-2          96    B  1  l2r ISO8859-2
  735.      latin-iso8859-3          96    C  1  l2r ISO8859-3
  736.      latin-iso8859-4          96    D  1  l2r ISO8859-4
  737.      cyrillic-iso8859-5       96    L  1  l2r ISO8859-5
  738.      arabic-iso8859-6         96    G  1  r2l ISO8859-6
  739.      greek-iso8859-7          96    F  1  l2r ISO8859-7
  740.      hebrew-iso8859-8         96    H  1  r2l ISO8859-8
  741.      latin-iso8859-9          96    M  1  l2r ISO8859-9
  742.      thai-tis620              96    T  1  l2r TIS620
  743.      katakana-jisx0201        94    I  1  l2r JISX0201.1976
  744.      latin-jisx0201           94    J  0  l2r JISX0201.1976
  745.      japanese-jisx0208-1978   94x94 @  0  l2r JISX0208.1978
  746.      japanese-jisx0208        94x94 B  0  l2r JISX0208.19(83|90)
  747.      japanese-jisx0212        94x94 D  0  l2r JISX0212
  748.      chinese-gb2312           94x94 A  0  l2r GB2312
  749.      chinese-cns11643-1       94x94 G  0  l2r CNS11643.1
  750.      chinese-cns11643-2       94x94 H  0  l2r CNS11643.2
  751.      chinese-big5-1           94x94 0  0  l2r Big5
  752.      chinese-big5-2           94x94 1  0  l2r Big5
  753.      korean-ksc5601           94x94 C  0  l2r KSC5601
  754.      composite                96x96    0  l2r ---
  755.  
  756.    The following charsets are predefined in the Lisp code.
  757.  
  758.      Name                     Type  Fi Gr Dir Registry
  759.      --------------------------------------------------------------
  760.      arabic-digit             94    2  0  l2r MuleArabic-0
  761.      arabic-1-column          94    3  0  r2l MuleArabic-1
  762.      arabic-2-column          94    4  0  r2l MuleArabic-2
  763.      sisheng                  94    0  0  l2r sisheng_cwnn\|OMRON_UDC_ZH
  764.      chinese-cns11643-3       94x94 I  0  l2r CNS11643.1
  765.      chinese-cns11643-4       94x94 J  0  l2r CNS11643.1
  766.      chinese-cns11643-5       94x94 K  0  l2r CNS11643.1
  767.      chinese-cns11643-6       94x94 L  0  l2r CNS11643.1
  768.      chinese-cns11643-7       94x94 M  0  l2r CNS11643.1
  769.      ethiopic                 94x94 2  0  l2r Ethio
  770.      ascii-r2l                94    B  0  r2l ISO8859-1
  771.      ipa                      96    0  1  l2r MuleIPA
  772.      vietnamese-lower         96    1  1  l2r VISCII1.1
  773.      vietnamese-upper         96    2  1  l2r VISCII1.1
  774.  
  775.    For all of the above charsets, the dimension and number of columns
  776. are the same.
  777.  
  778.    Note that ASCII, Control-1, and Composite are handled specially.
  779. This is why some of the fields are blank; and some of the filled-in
  780. fields (e.g. the type) are not really accurate.
  781.  
  782. 
  783. File: lispref.info,  Node: MULE Characters,  Next: Composite Characters,  Prev: Charsets,  Up: MULE
  784.  
  785. MULE Characters
  786. ===============
  787.  
  788.  - Function: make-char CHARSET ARG1 &optional ARG2
  789.      This function makes a multi-byte character from CHARSET and octets
  790.      ARG1 and ARG2.
  791.  
  792.  - Function: char-charset CH
  793.      This function returns the character set of char CH.
  794.  
  795.  - Function: char-octet CH &optional N
  796.      This function returns the octet (i.e. position code) numbered N
  797.      (should be 0 or 1) of char CH.  N defaults to 0 if omitted.
  798.  
  799.  - Function: find-charset-region START END &optional BUFFER
  800.      This function returns a list of the charsets in the region between
  801.      START and END.  BUFFER defaults to the current buffer if omitted.
  802.  
  803.  - Function: find-charset-string STRING
  804.      This function returns a list of the charsets in STRING.
  805.  
  806. 
  807. File: lispref.info,  Node: Composite Characters,  Next: ISO 2022,  Prev: MULE Characters,  Up: MULE
  808.  
  809. Composite Characters
  810. ====================
  811.  
  812.    Composite characters are not yet completely implemented.
  813.  
  814.  - Function: make-composite-char STRING
  815.      This function converts a string into a single composite character.
  816.      The character is the result of overstriking all the characters in
  817.      the string.
  818.  
  819.  - Function: composite-char-string CH
  820.      This function returns a string of the characters comprising a
  821.      composite character.
  822.  
  823.  - Function: compose-region START END &optional BUFFER
  824.      This function composes the characters in the region from START to
  825.      END in BUFFER into one composite character.  The composite
  826.      character replaces the composed characters.  BUFFER defaults to
  827.      the current buffer if omitted.
  828.  
  829.  - Function: decompose-region START END &optional BUFFER
  830.      This function decomposes any composite characters in the region
  831.      from START to END in BUFFER.  This converts each composite
  832.      character into one or more characters, the individual characters
  833.      out of which the composite character was formed.  Non-composite
  834.      characters are left as-is.  BUFFER defaults to the current buffer
  835.      if omitted.
  836.  
  837. 
  838. File: lispref.info,  Node: ISO 2022,  Next: Coding Systems,  Prev: Composite Characters,  Up: MULE
  839.  
  840. ISO 2022
  841. ========
  842.  
  843.    This section briefly describes the ISO 2022 encoding standard.  For
  844. more thorough understanding, please refer to the original document of
  845. ISO 2022.
  846.  
  847.    Character sets ("charsets") are classified into the following four
  848. categories, according to the number of characters of charset:
  849. 94-charset, 96-charset, 94x94-charset, and 96x96-charset.
  850.  
  851. 94-charset
  852.      ASCII(B), left(J) and right(I) half of JISX0201, ...
  853.  
  854. 96-charset
  855.      Latin-1(A), Latin-2(B), Latin-3(C), ...
  856.  
  857. 94x94-charset
  858.      GB2312(A), JISX0208(B), KSC5601(C), ...
  859.  
  860. 96x96-charset
  861.      none for the moment
  862.  
  863.    The character in parentheses after the name of each charset is the
  864. "final character" F, which can be regarded as the identifier of the
  865. charset.  ECMA allocates F to each charset.  F is in the range of
  866. 0x30..0x7F, but 0x30..0x3F are only for private use.
  867.  
  868.    Note: "ECMA" = European Computer Manufacturers Association
  869.  
  870.    There are four "registers of charsets", called G0 thru G3.  You can
  871. designate (or assign) any charset to one of these registers.
  872.  
  873.    The code space contained within one octet (of size 256) is divided
  874. into 4 areas: C0, GL, C1, and GR.  GL and GR are the areas into which a
  875. register of charset can be invoked into.
  876.  
  877.          C0: 0x00 - 0x1F
  878.          GL: 0x20 - 0x7F
  879.          C1: 0x80 - 0x9F
  880.          GR: 0xA0 - 0xFF
  881.  
  882.    Usually, in the initial state, G0 is invoked into GL, and G1 is
  883. invoked into GR.
  884.  
  885.    ISO 2022 distinguishes 7-bit environments and 8-bit environments.  In
  886. 7-bit environments, only C0 and GL are used.
  887.  
  888.    Charset designation is done by escape sequences of the form:
  889.  
  890.          ESC [I] I F
  891.  
  892.    where I is an intermediate character in the range 0x20 - 0x2F, and F
  893. is the final character identifying this charset.
  894.  
  895.    The meaning of intermediate characters are:
  896.  
  897.          $ [0x24]: indicate charset of dimension 2 (94x94 or 96x96).
  898.          ( [0x28]: designate to G0 a 94-charset whose final byte is F.
  899.          ) [0x29]: designate to G1 a 94-charset whose final byte is F.
  900.          * [0x2A]: designate to G2 a 94-charset whose final byte is F.
  901.          + [0x2B]: designate to G3 a 94-charset whose final byte is F.
  902.          - [0x2D]: designate to G1 a 96-charset whose final byte is F.
  903.          . [0x2E]: designate to G2 a 96-charset whose final byte is F.
  904.          / [0x2F]: designate to G3 a 96-charset whose final byte is F.
  905.  
  906.    The following rule is not allowed in ISO 2022 but can be used in
  907. Mule.
  908.  
  909.          , [0x2C]: designate to G0 a 96-charset whose final byte is F.
  910.  
  911.    Here are examples of designations:
  912.  
  913.          ESC ( B :              designate to G0 ASCII
  914.          ESC - A :              designate to G1 Latin-1
  915.          ESC $ ( A or ESC $ A : designate to G0 GB2312
  916.          ESC $ ( B or ESC $ B : designate to G0 JISX0208
  917.          ESC $ ) C :            designate to G1 KSC5601
  918.  
  919.    To use a charset designated to G2 or G3, and to use a charset
  920. designated to G1 in a 7-bit environment, you must explicitly invoke G1,
  921. G2, or G3 into GL.  There are two types of invocation, Locking Shift
  922. (forever) and Single Shift (one character only).
  923.  
  924.    Locking Shift is done as follows:
  925.  
  926.          LS0 or SI (0x0F): invoke G0 into GL
  927.          LS1 or SO (0x0E): invoke G1 into GL
  928.          LS2:  invoke G2 into GL
  929.          LS3:  invoke G3 into GL
  930.          LS1R: invoke G1 into GR
  931.          LS2R: invoke G2 into GR
  932.          LS3R: invoke G3 into GR
  933.  
  934.    Single Shift is done as follows:
  935.  
  936.          SS2 or ESC N: invoke G2 into GL
  937.          SS3 or ESC O: invoke G3 into GL
  938.  
  939.    (#### Ben says: I think the above is slightly incorrect.  It appears
  940. that SS2 invokes G2 into GR and SS3 invokes G3 into GR, whereas ESC N
  941. and ESC O behave as indicated.  The above definitions will not parse
  942. EUC-encoded text correctly, and it looks like the code in mule-coding.c
  943. has similar problems.)
  944.  
  945.    You may realize that there are a lot of ISO-2022-compliant ways of
  946. encoding multilingual text.  Now, in the world, there exist many coding
  947. systems such as X11's Compound Text, Japanese JUNET code, and so-called
  948. EUC (Extended UNIX Code); all of these are variants of ISO 2022.
  949.  
  950.    In Mule, we characterize ISO 2022 by the following attributes:
  951.  
  952.   1. Initial designation to G0 thru G3.
  953.  
  954.   2. Allow designation of short form for Japanese and Chinese.
  955.  
  956.   3. Should we designate ASCII to G0 before control characters?
  957.  
  958.   4. Should we designate ASCII to G0 at the end of line?
  959.  
  960.   5. 7-bit environment or 8-bit environment.
  961.  
  962.   6. Use Locking Shift or not.
  963.  
  964.   7. Use ASCII or JIS0201-1976-Roman.
  965.  
  966.   8. Use JISX0208-1983 or JISX0208-1976.
  967.  
  968.    (The last two are only for Japanese.)
  969.  
  970.    By specifying these attributes, you can create any variant of ISO
  971. 2022.
  972.  
  973.    Here are several examples:
  974.  
  975.      junet -- Coding system used in JUNET.
  976.          1. G0 <- ASCII, G1..3 <- never used
  977.          2. Yes.
  978.          3. Yes.
  979.          4. Yes.
  980.          5. 7-bit environment
  981.          6. No.
  982.          7. Use ASCII
  983.          8. Use JISX0208-1983
  984.      
  985.      ctext -- Compound Text
  986.          1. G0 <- ASCII, G1 <- Latin-1, G2,3 <- never used
  987.          2. No.
  988.          3. No.
  989.          4. Yes.
  990.          5. 8-bit environment
  991.          6. No.
  992.          7. Use ASCII
  993.          8. Use JISX0208-1983
  994.      
  995.      euc-china -- Chinese EUC.  Although many people call this
  996.      as "GB encoding", the name may cause misunderstanding.
  997.          1. G0 <- ASCII, G1 <- GB2312, G2,3 <- never used
  998.          2. No.
  999.          3. Yes.
  1000.          4. Yes.
  1001.          5. 8-bit environment
  1002.          6. No.
  1003.          7. Use ASCII
  1004.          8. Use JISX0208-1983
  1005.      
  1006.      korean-mail -- Coding system used in Korean network.
  1007.          1. G0 <- ASCII, G1 <- KSC5601, G2,3 <- never used
  1008.          2. No.
  1009.          3. Yes.
  1010.          4. Yes.
  1011.          5. 7-bit environment
  1012.          6. Yes.
  1013.          7. No.
  1014.          8. No.
  1015.  
  1016.    Mule creates all these coding systems by default.
  1017.  
  1018. 
  1019. File: lispref.info,  Node: Coding Systems,  Next: CCL,  Prev: ISO 2022,  Up: MULE
  1020.  
  1021. Coding Systems
  1022. ==============
  1023.  
  1024.    A coding system is an object that defines how text containing
  1025. multiple character sets is encoded into a stream of (typically 8-bit)
  1026. bytes.  The coding system is used to decode the stream into a series of
  1027. characters (which may be from multiple charsets) when the text is read
  1028. from a file or process, and is used to encode the text back into the
  1029. same format when it is written out to a file or process.
  1030.  
  1031.    For example, many ISO-2022-compliant coding systems (such as Compound
  1032. Text, which is used for inter-client data under the X Window System) use
  1033. escape sequences to switch between different charsets - Japanese Kanji,
  1034. for example, is invoked with `ESC $ ( B'; ASCII is invoked with `ESC (
  1035. B'; and Cyrillic is invoked with `ESC - L'.  See `make-coding-system'
  1036. for more information.
  1037.  
  1038.    Coding systems are normally identified using a symbol, and the
  1039. symbol is accepted in place of the actual coding system object whenever
  1040. a coding system is called for. (This is similar to how faces and
  1041. charsets work.)
  1042.  
  1043.  - Function: coding-system-p OBJECT
  1044.      This function returns non-`nil' if OBJECT is a coding system.
  1045.  
  1046. * Menu:
  1047.  
  1048. * Coding System Types::               Classifying coding systems.
  1049. * EOL Conversion::                    Dealing with different ways of denoting
  1050.                                         the end of a line.
  1051. * Coding System Properties::          Properties of a coding system.
  1052. * Basic Coding System Functions::     Working with coding systems.
  1053. * Coding System Property Functions::  Retrieving a coding system's properties.
  1054. * Encoding and Decoding Text::        Encoding and decoding text.
  1055. * Detection of Textual Encoding::     Determining how text is encoded.
  1056. * Big5 and Shift-JIS Functions::      Special functions for these non-standard
  1057.                                         encodings.
  1058.  
  1059. 
  1060. File: lispref.info,  Node: Coding System Types,  Next: EOL Conversion,  Up: Coding Systems
  1061.  
  1062. Coding System Types
  1063. -------------------
  1064.  
  1065. `nil'
  1066. `autodetect'
  1067.      Automatic conversion.  XEmacs attempts to detect the coding system
  1068.      used in the file.
  1069.  
  1070. `no-conversion'
  1071.      No conversion.  Use this for binary files and such.  On output,
  1072.      graphic characters that are not in ASCII or Latin-1 will be
  1073.      replaced by a `?'. (For a no-conversion-encoded buffer, these
  1074.      characters will only be present if you explicitly insert them.)
  1075.  
  1076. `shift-jis'
  1077.      Shift-JIS (a Japanese encoding commonly used in PC operating
  1078.      systems).
  1079.  
  1080. `iso2022'
  1081.      Any ISO-2022-compliant encoding.  Among other things, this
  1082.      includes JIS (the Japanese encoding commonly used for e-mail),
  1083.      national variants of EUC (the standard Unix encoding for Japanese
  1084.      and other languages), and Compound Text (an encoding used in X11).
  1085.      You can specify more specific information about the conversion
  1086.      with the FLAGS argument.
  1087.  
  1088. `big5'
  1089.      Big5 (the encoding commonly used for Taiwanese).
  1090.  
  1091. `ccl'
  1092.      The conversion is performed using a user-written pseudo-code
  1093.      program.  CCL (Code Conversion Language) is the name of this
  1094.      pseudo-code.
  1095.  
  1096. `internal'
  1097.      Write out or read in the raw contents of the memory representing
  1098.      the buffer's text.  This is primarily useful for debugging
  1099.      purposes, and is only enabled when XEmacs has been compiled with
  1100.      `DEBUG_XEMACS' set (the `--debug' configure option).  *Warning*:
  1101.      Reading in a file using `internal' conversion can result in an
  1102.      internal inconsistency in the memory representing a buffer's text,
  1103.      which will produce unpredictable results and may cause XEmacs to
  1104.      crash.  Under normal circumstances you should never use `internal'
  1105.      conversion.
  1106.  
  1107. 
  1108. File: lispref.info,  Node: EOL Conversion,  Next: Coding System Properties,  Prev: Coding System Types,  Up: Coding Systems
  1109.  
  1110. EOL Conversion
  1111. --------------
  1112.  
  1113. `nil'
  1114.      Automatically detect the end-of-line type (LF, CRLF, or CR).  Also
  1115.      generate subsidiary coding systems named `NAME-unix', `NAME-dos',
  1116.      and `NAME-mac', that are identical to this coding system but have
  1117.      an EOL-TYPE value of `lf', `crlf', and `cr', respectively.
  1118.  
  1119. `lf'
  1120.      The end of a line is marked externally using ASCII LF.  Since this
  1121.      is also the way that XEmacs represents an end-of-line internally,
  1122.      specifying this option results in no end-of-line conversion.  This
  1123.      is the standard format for Unix text files.
  1124.  
  1125. `crlf'
  1126.      The end of a line is marked externally using ASCII CRLF.  This is
  1127.      the standard format for MS-DOS text files.
  1128.  
  1129. `cr'
  1130.      The end of a line is marked externally using ASCII CR.  This is the
  1131.      standard format for Macintosh text files.
  1132.  
  1133. `t'
  1134.      Automatically detect the end-of-line type but do not generate
  1135.      subsidiary coding systems.  (This value is converted to `nil' when
  1136.      stored internally, and `coding-system-property' will return `nil'.)
  1137.  
  1138. 
  1139. File: lispref.info,  Node: Coding System Properties,  Next: Basic Coding System Functions,  Prev: EOL Conversion,  Up: Coding Systems
  1140.  
  1141. Coding System Properties
  1142. ------------------------
  1143.  
  1144. `mnemonic'
  1145.      String to be displayed in the modeline when this coding system is
  1146.      active.
  1147.  
  1148. `eol-type'
  1149.      End-of-line conversion to be used.  It should be one of the types
  1150.      listed in *Note EOL Conversion::.
  1151.  
  1152. `post-read-conversion'
  1153.      Function called after a file has been read in, to perform the
  1154.      decoding.  Called with two arguments, BEG and END, denoting a
  1155.      region of the current buffer to be decoded.
  1156.  
  1157. `pre-write-conversion'
  1158.      Function called before a file is written out, to perform the
  1159.      encoding.  Called with two arguments, BEG and END, denoting a
  1160.      region of the current buffer to be encoded.
  1161.  
  1162.    The following additional properties are recognized if TYPE is
  1163. `iso2022':
  1164.  
  1165. `charset-g0'
  1166. `charset-g1'
  1167. `charset-g2'
  1168. `charset-g3'
  1169.      The character set initially designated to the G0 - G3 registers.
  1170.      The value should be one of
  1171.  
  1172.         * A charset object (designate that character set)
  1173.  
  1174.         * `nil' (do not ever use this register)
  1175.  
  1176.         * `t' (no character set is initially designated to the
  1177.           register, but may be later on; this automatically sets the
  1178.           corresponding `force-g*-on-output' property)
  1179.  
  1180. `force-g0-on-output'
  1181. `force-g1-on-output'
  1182. `force-g2-on-output'
  1183. `force-g3-on-output'
  1184.      If non-`nil', send an explicit designation sequence on output
  1185.      before using the specified register.
  1186.  
  1187. `short'
  1188.      If non-`nil', use the short forms `ESC $ @', `ESC $ A', and `ESC $
  1189.      B' on output in place of the full designation sequences `ESC $ (
  1190.      @', `ESC $ ( A', and `ESC $ ( B'.
  1191.  
  1192. `no-ascii-eol'
  1193.      If non-`nil', don't designate ASCII to G0 at each end of line on
  1194.      output.  Setting this to non-`nil' also suppresses other
  1195.      state-resetting that normally happens at the end of a line.
  1196.  
  1197. `no-ascii-cntl'
  1198.      If non-`nil', don't designate ASCII to G0 before control chars on
  1199.      output.
  1200.  
  1201. `seven'
  1202.      If non-`nil', use 7-bit environment on output.  Otherwise, use
  1203.      8-bit environment.
  1204.  
  1205. `lock-shift'
  1206.      If non-`nil', use locking-shift (SO/SI) instead of single-shift or
  1207.      designation by escape sequence.
  1208.  
  1209. `no-iso6429'
  1210.      If non-`nil', don't use ISO6429's direction specification.
  1211.  
  1212. `escape-quoted'
  1213.      If non-nil, literal control characters that are the same as the
  1214.      beginning of a recognized ISO 2022 or ISO 6429 escape sequence (in
  1215.      particular, ESC (0x1B), SO (0x0E), SI (0x0F), SS2 (0x8E), SS3
  1216.      (0x8F), and CSI (0x9B)) are "quoted" with an escape character so
  1217.      that they can be properly distinguished from an escape sequence.
  1218.      (Note that doing this results in a non-portable encoding.) This
  1219.      encoding flag is used for byte-compiled files.  Note that ESC is a
  1220.      good choice for a quoting character because there are no escape
  1221.      sequences whose second byte is a character from the Control-0 or
  1222.      Control-1 character sets; this is explicitly disallowed by the ISO
  1223.      2022 standard.
  1224.  
  1225. `input-charset-conversion'
  1226.      A list of conversion specifications, specifying conversion of
  1227.      characters in one charset to another when decoding is performed.
  1228.      Each specification is a list of two elements: the source charset,
  1229.      and the destination charset.
  1230.  
  1231. `output-charset-conversion'
  1232.      A list of conversion specifications, specifying conversion of
  1233.      characters in one charset to another when encoding is performed.
  1234.      The form of each specification is the same as for
  1235.      `input-charset-conversion'.
  1236.  
  1237.    The following additional properties are recognized (and required) if
  1238. TYPE is `ccl':
  1239.  
  1240. `decode'
  1241.      CCL program used for decoding (converting to internal format).
  1242.  
  1243. `encode'
  1244.      CCL program used for encoding (converting to external format).
  1245.  
  1246.